package cn.ljy.common.annotation.validate;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.math.BigDecimal;


public class DecimalMax10Int2ScaleValidator implements ConstraintValidator<DecimalMax10Int2Scale, Object> {

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        if (value == null) {
            return true;   // 让 @NotNull 处理
        }

        BigDecimal decimal;
        // 兼容 BigDecimal / String / Number
        if (value instanceof BigDecimal) {
            decimal = (BigDecimal) value;
        } else if (value instanceof String) {
            try {
                decimal = new BigDecimal((String) value);
            } catch (NumberFormatException e) {
                return false;
            }
        } else if (value instanceof Number) {
            decimal = BigDecimal.valueOf(((Number) value).doubleValue());
        } else {
            return false;
        }

        // 小数位必须恰好 2 位
        if (decimal.scale() != 2) {
            return false;
        }

        // 整数位最多 10 位（去掉符号和小数位）
        String intPart = decimal.toPlainString().split("\\.")[0];
        // 去掉负号
        intPart = intPart.replace("-", "");
        return intPart.length() <= 10;
    }
}